package com.ruoyi.news.controller;


import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.news.domain.dto.NewsDto;
import com.ruoyi.news.domain.vo.NewsVo;
import com.ruoyi.news.domain.query.NewsQuery;
import com.ruoyi.news.domain.pojo.News;
import com.ruoyi.news.service.INewsService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static com.ruoyi.common.core.utils.PageUtils.startPage;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author lijuntao
 * @since 2025-06-21
 */
@RestController
@RequestMapping("/news")
@RequiredArgsConstructor
@ApiOperation("新闻管理服务")
@Slf4j
public class NewsController extends BaseController {
    private final INewsService newsService;

    /**
     查询新闻列表；需要分页

     **请求地址**：/news/list

     **请求方式**：get

     **请求参数**：News ；**特别说明**News中的searchValue中包含了要搜索的分类及其子类id；分类id之间使用逗号间隔；例如：1,4,6,8 所以在后端查询时候需要注意编写查询的条件

     **返回结果**：TableDataInfo （若依 表格的异步返回数据类型）

     Tips：可以参考原有的其它模块的实现方式
     */
    @ApiOperation("查询新闻列表；需要分页")
    @GetMapping("/list")
    public TableDataInfo listByPage (NewsQuery query) {
        startPage();
        List<NewsVo> list = newsService.listByPage(query);
        return getDataTable(list);
    }
    @ApiOperation("删除新闻")
    @DeleteMapping("/{newsIds}")
    public AjaxResult deleteByIds(@PathVariable List<Integer> newsIds) {
        return toAjax(newsService.deleteByIds(newsIds));
}

    @ApiOperation("新增新闻")
    @PostMapping
    public AjaxResult add(@RequestBody NewsDto dto) {
        return toAjax(newsService.insertNews(dto));
}

    @ApiOperation("根据id获取新闻")
    @GetMapping("/{newsId}")
    public AjaxResult getById(@PathVariable Integer newsId) {
        return success(newsService.getById(newsId));
}
    @ApiOperation("修改新闻")
    @PutMapping
    public AjaxResult update(@RequestBody NewsDto dto) {
        log.info("修改新闻：{}", dto);
        //    if (dto.getNewsId() == null) {
        //        return AjaxResult.error("新闻ID不能为空");
        //    }
    // 将 Dto 转换为实体类对象
   /* News news = new News();
    org.springframework.beans.BeanUtils.copyProperties( dto,news);
    return toAjax(newsService.updateById(dto));*/
        newsService.updateNews(dto);
        return AjaxResult.success();
    }
}
